package pl.enigmatic.util;

// podstawowe funkcje slu��ce do obr�bki tekstu na potrzeby szyfrowania Enigma
public class Text {
	private Text() {}

	// wstawia separator ze zmiennej delimiter co period miejsc w napisie str
	// przyk�adowo wywo�anie putDelimiters("AAAAAA", "-", 2) zwr�ci
	// jako wynik ciag znak�w "AA-AA-AA"
	public static String putDelimiters(final String str, final String delimiter, final int period) {
		if (period < 1 || str.length() <= period) { return str; }
		String result = str.substring(0, period);
		String remainder = str.substring(period, str.length());
		while (remainder.length() > period) {
			result += delimiter + remainder.substring(0, period);
			remainder = remainder.substring(period, remainder.length());
		}
		return result + delimiter + remainder;
	}

	// zamienia elementy w wielokrotno�ciach pozycji period na newStr
	// przyk�adowo wywo�anie putDelimiters("AAAAA", "-", 2) zwr�ci
	// jako wynik ci�g znak�w "A-A-A"
	public static String replaceAt(final String str, final String newStr, final int period) {
		if (str.length() <= period || period < 1) { return str; }
		String result = str.substring(0, period - 1);
		String remainder = str.substring(period - 1, str.length());
		while (remainder.length() >= period) {
			result += newStr + remainder.substring(1, period);
			remainder = remainder.substring(period, remainder.length());
		}
		return result + newStr + remainder;
	}

	// grupuje znaki nast�puj�co { najpierw dzieli na linie co newlinePeriod
	// znak�w
	// potem linie dzieli spacj� co spacePeriod znak�w
	// przyk�adowo wywo�anie groupTxt("ABCD", 2, 1) da {
	// A B
	// C D
	public static String groupTxt(final String str, final int newlinePeriod, final int spacePeriod) {
		return replaceAt(Text.putDelimiters(str, " ", spacePeriod), "\n", (spacePeriod + 1) * newlinePeriod);
	}

	// do ka�dej linii napisu str dodaje na pocz�tku napis ze zmiennej starter
	public static String insertLineStarter(final String str, final String starter) {
		final String[] lines = str.split("\n");
		String result = "";
		for (final String line : lines) {
			result += starter + line;
		}
		return result;
	}

	// wyci�ga z napisu podnapis, kt�ry sk�ada si� z liter b�d�cych po kolei w
	// odst�pie period od siebie, poczynaj�c od pozycji start
	public static String subStrPeriod(final String str, final int start, final int period) {
		String result = "";
		int i = start;
		while (i < str.length()) {
			result += str.charAt(i);
			i += period;
		}
		return result;
	}

	public static String getRomanNumeral(final int n) {
		String s = "";
		switch (n) {
			case 1:
				s = "I";
			break;
			case 2:
				s = "II";
			break;
			case 3:
				s = "III";
			break;
			case 4:
				s = "IV";
			break;
			case 5:
				s = "V";
			break;
			case 6:
				s = "VI";
			break;
			case 7:
				s = "VII";
			break;
			case 8:
				s = "VIII";
			break;
		}
		return s;
	}
}
